package com.java.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP协议接收数据：相当于服务端，无需建立连接也可接收数据。先运行服务端再运行客户端发生数据，查看服务端控制台数据接收情况
 */
public class ServerSocketReceive {
    public static void main(String[] args) throws IOException {
        // 创建对象
        ServerSocket serverSocket = new ServerSocket(8888);
        
        while (true) {
            // accept：等待客户端连接，返回值指客户端连接对象。该方法会阻塞，直到有客户端连接才继续向下运行
            Socket socket = serverSocket.accept();
            
            System.out.println("客户端" + socket.getPort() + "发送的数据为 ");
            
            // getInputStream：获取输入流，并通过输入流在网络中接收数据
            InputStream inputStream = socket.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            int data;
            while ((data = inputStreamReader.read()) != -1) { // 一直阻塞于此循环，直到输入输出通道一方关闭
                System.out.print((char) data); // 你好啊！
            }
            System.out.println();
            
            socket.close();
        }
        
        // close：释放资源
        // serverSocket.close();
    }
}
